package com.hj.chartdemo.chart;

import android.graphics.Color;
import android.graphics.Typeface;

import com.github.mikephil.charting.animation.Easing;
import com.github.mikephil.charting.charts.PieChart;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.PieData;
import com.github.mikephil.charting.data.PieDataSet;
import com.github.mikephil.charting.data.PieEntry;
import com.github.mikephil.charting.formatter.PercentFormatter;

import java.util.ArrayList;

public class PieChartManagger {

    private static PieChartManagger instance = null;

    public static PieChartManagger getInstance() {
        if (instance == null) {
            instance = new PieChartManagger();
        }
        return instance;
    }


    //初始化
    public void init(PieChart chart) {
        //显示成百分比
        chart.setUsePercentValues(false);
        //取消右下角描述
        chart.getDescription().setEnabled(false);
        //图相对于上下左右的偏移
        chart.setExtraOffsets(5, 5, 5, 5);

//        设置pieChart图表转动阻力摩擦系数[0,1]
        chart.setDragDecelerationFrictionCoef(0.95f);

//        chart.setCenterTextTypeface(tfLight);
//        chart.setCenterText(generateCenterSpannableText());

        //  是否显示中间的洞
        chart.setDrawHoleEnabled(true);
        chart.setHoleColor(Color.WHITE);

        // 半透明圈
        //设置半透明圆圈的颜色
        chart.setTransparentCircleColor(Color.WHITE);
        //设置半透明圆圈的透明度
        chart.setTransparentCircleAlpha(110);
        chart.setTransparentCircleRadius(52f);

        //设置中间洞的大小
        chart.setHoleRadius(48f);
        //饼状图中间可以添加文字
        chart.setDrawCenterText(true);
        // 初始旋转角度
        chart.setRotationAngle(0);
        // 可以手动旋转
        chart.setRotationEnabled(true);
        chart.setHighlightPerTapEnabled(true);

        // chart.setUnit(" €");
        // chart.setDrawUnitsInChart(true);

        // add a selection listener
//        chart.setOnChartValueSelectedListener(this);

        chart.animateY(1400, Easing.EaseInOutQuad);

        Legend l = chart.getLegend();
        l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP);
        l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.RIGHT);
        l.setOrientation(Legend.LegendOrientation.VERTICAL);
        l.setDrawInside(false);
        l.setXEntrySpace(7f);
        l.setYEntrySpace(0f);
        l.setYOffset(0f);

        chart.setNoDataText("暂无数据");

        // entry label styling
        //描述文字的颜色
        chart.setEntryLabelColor(Color.WHITE);
//        chart.setEntryLabelTypeface(tfRegular);
        //描述文字的大小
        chart.setEntryLabelTextSize(12f);
    }


//    /**
//     * 显示实心圆
//     * @param yvals
//     * @param colors
//     */
//    public void showSolidPieChart( List<PieEntry> yvals, List<Integer> colors) {
//        //数据集合
//        PieDataSet dataset = new PieDataSet(yvals, "");
//        //填充每个区域的颜色
//        dataset.setColors(colors);
//        //是否在图上显示数值
//        dataset.setDrawValues(true);
////        文字的大小
//        dataset.setValueTextSize(14);
////        文字的颜色
//        dataset.setValueTextColor(Color.RED);
////        文字的样式
//        dataset.setValueTypeface(Typeface.DEFAULT_BOLD);
//
////      当值位置为外边线时，表示线的前半段长度。
//        dataset.setValueLinePart1Length(0.4f);
////      当值位置为外边线时，表示线的后半段长度。
//        dataset.setValueLinePart2Length(0.4f);
////      当ValuePosits为OutsiDice时，指示偏移为切片大小的百分比
//        dataset.setValueLinePart1OffsetPercentage(80f);
//        // 当值位置为外边线时，表示线的颜色。
//        dataset.setValueLineColor(Color.parseColor("#a1a1a1"));
////        设置Y值的位置是在圆内还是圆外
//        dataset.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE);
////        设置Y轴描述线和填充区域的颜色一致
//        dataset.setUsingSliceColorAsValueLineColor(false);
////        设置每条之前的间隙
//        dataset.setSliceSpace(0);
//
//        //设置饼状Item被选中时变化的距离
//        dataset.setSelectionShift(5f);
//        //填充数据
//        PieData pieData = new PieData(dataset);
////        格式化显示的数据为%百分比
//        pieData.setValueFormatter(new PercentFormatter());
////        显示试图
//        pieChart.setData(pieData);
//    }


    public void  loadData(PieChart pieChart,
                          ArrayList<Entry> datas,
                          ArrayList<String> titles,
                          ArrayList<Integer> colors,
                          ArrayList<String> xlab,
                          Boolean showLegend){

        pieChart.getLegend().setEnabled(showLegend);
        ArrayList<PieEntry> yvals = new ArrayList<PieEntry>();
        int totalCount = 0;
        for (int i = 0; i < datas.size(); i++) {
            yvals.add(new PieEntry(datas.get(i).getY(), datas.get(i).getData()));
            totalCount += datas.get(i).getY();
        }

        pieChart.setCenterText("总计\n"+ totalCount);

        //数据集合
        PieDataSet dataset = new PieDataSet(yvals, "");
        //填充每个区域的颜色
        dataset.setColors(colors);
        //是否在图上显示数值
        dataset.setDrawValues(true);
//        文字的大小
        dataset.setValueTextSize(11f);
//        文字的颜色
        dataset.setValueTextColor(Color.WHITE);
//        文字的样式
        dataset.setValueTypeface(Typeface.DEFAULT_BOLD);

//      当值位置为外边线时，表示线的前半段长度。
        dataset.setValueLinePart1Length(0.4f);
//      当值位置为外边线时，表示线的后半段长度。
        dataset.setValueLinePart2Length(0.4f);
//      当ValuePosits为OutsiDice时，指示偏移为切片大小的百分比
        dataset.setValueLinePart1OffsetPercentage(80f);
        // 当值位置为外边线时，表示线的颜色。
        dataset.setValueLineColor(Color.parseColor("#a1a1a1"));
//        设置Y值的位置是在圆内还是圆外
        dataset.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE);
//        设置Y轴描述线和填充区域的颜色一致
        dataset.setUsingSliceColorAsValueLineColor(false);
//        设置每条之前的间隙
        dataset.setSliceSpace(3);
        //设置饼状Item被选中时变化的距离
        dataset.setSelectionShift(5f);
        dataset.setValueTextColor(Color.BLACK);
        //填充数据
        PieData pieData = new PieData(dataset);
//        格式化显示的数据为%百分比
        pieData.setValueFormatter(new PercentFormatter());
//        显示试图
        pieChart.setData(pieData);
        pieChart.highlightValues(null);
        pieChart.invalidate();

    }
}
